python3小白课:参数收集

普通参数收集

python跟很多编程语言一样,支持定义个数可变的参数,这样定义起来很方便,也能支持处理多个传入的参数。

在定义形参的时候,我们可以在形参前面添加一个*星号用来表示这个形参支持接收多个参数值,多个参数值会自动组装成元组并传入,在函数内部我们就可以使用处理元组的方式来处理传入参数了。

# coding:utf-8
def info(name, *nickname):
    print(f"您的名字为:{name}")
    print(f"您的昵称有这些:{nickname}")
info("小白", "little bai", "白白", "小白白", "超级白")

这里我们使用了f-string来格式化文本,这里的第一个参数被赋值给name这个形参,而后面不论增加赋值多少个参数,都会组合成元组,赋值给nickname,需要注意的是,在函数内部调用nickname的时候,不需要带*号。

[!danger]

这种带一个*号的能收集参数的形参在同一个函数中仅能定义一个,因为多了解释器就不好识别并自动分配了。

这样的形参还能放在前面,我们看个例子:

# coding:utf-8
def info(*nickname, name):
    print(f"您的名字为:{name}")
    print(f"您的昵称有这些:{nickname}")
info("little bai", "白白", "小白白", "超级白", name="小白")

由于加*的形参支持读取可变个数的参数,因此其他的参数,解释器默认不能正常找到,如果我们要赋值给name参数,就必须使用关键字参数,而关键字参数需要在调用参数的最后来写,所以就写成了我们上述代码的样子。


关键字参数收集

除了之前一个*的普通关键字收集,python函数在定义时,还支持在形参前加两个*号,即**形参名,这样写后,会将传入的关键字参数收集成字典,在函数内部可以调用。

[!danger]

同样的,在同一个函数定义中,也只允许有一个关键字参数收集的参数定义。

不过,关键字参数的收集可以跟普通参数收集同时存在。

具体的使用大家可以根据自己的业务场景来设计,我们来看个简单的使用。

# coding:utf-8
def info(name, *nickname, **score):
    print(f"您的名字为:{name}")
    print(f"您的昵称有这些:{nickname}")
    print(f"您的成绩为:{score}")
info("小白", "little bai", "白白", "小白白", "超级白", 语文=89, 数学=99)

你也可以在函数内部使用字典的方法来获取内容。


逆向参数收集

除了前面讲的正向的参数收集,python函数定义还支持逆向参数收集。

# coding:utf-8
def info(name, nickname):
    print(f"您的名字为:{name}")
    print(f"您的昵称为:{nickname}")
a = ["小白", "白白"]
info(*a)

我们再来看一个传入字典的逆向收集。

# coding:utf-8
def info(name, nickname, score):
    print(f"您的名字为:{name}")
    print(f"您的昵称为:{nickname}")
    print(f"您的成绩为:{score}")
a = {
    "name": "小白",
    "nickname": "白白",
    "score": 94
}
info(**a)

这样函数就会自动寻找字典中的键来匹配了。我尝试了一下,如果字典中多定义一个键,发现会报错的。所以函数需要哪几个,就传入哪几个键的字典就好了。

单词释义

单词 释义
nickname 昵称,外号
name 姓名
score 成绩
Copyright © 雪山凌狐教程 all right reserved,powered by Gitbook该文件修订时间: 2020-04-11 17:24:53

results matching ""

    No results matching ""